如何用 RSS 实现个性化订阅 | 实用技巧
| 本文为付费栏目文章,您已订阅,可阅读全文 |
用 RSS 订阅各种信息,是信息流愈发汹涌后我们将面对的一个自然阶段。而 RSS 订阅源,则是整个阅读的基础。身为读者,我们淘 RSS 订阅源的样子很像 iOS 自动化玩家遍地搜罗 URL Scheme,每找到一个都能高兴上很久。
不少网站会摆上 RSS 订阅图标,即使没找到,Google 一下 网站名 + RSS
,也往往有热心人分享。
可对于高级玩家来说,他们已经不满足囫囵订阅整个网站,而是需要精确订阅某个页面,比如:
- 我关注的知乎答主最近有啥动态?
- 我在追的动漫这周更新了没?
- 豆瓣小组最近在讨论什么?
- ……
这些细分的板块、栏目和个人主页,往往都不提供 RSS 订阅源。如果挖到一个很感兴趣的网页,却卡在订阅源这一站,着实是一件让人丧气的事儿。
还好,已经有一些 RSS 地址烧录服务,RSSHub 就是我最常用的一个。但每次去 RSSHub 网页上烧录链接仍然不够方便,所以我专门做了个捷径,可以烧录常见网站的用户、栏目页面,生成专门的订阅地址。
目前这个捷径支持了大量热门网站的栏目,包括微信、知乎、豆瓣、YouTube……更多网站可以在 RSSHub 页面上找到。
小知识:「烧录」是怎么来的 🔥
生成一个 RSS 链接,为啥要说成「烧录」?其实这个词来自硬件的制作工艺,比如光盘,要用激光把信息「烧」上去。后来各种生成信息的操作都可以沿用这一称呼,很有画面感、工坊气。在 RSS 领域,Google FeedBurner 是较早开始用「烧录(burn)」一词的,本文也把生成链接的操作冠以「烧录」之名字。
捷径的使用
拿到这个捷径之后,你完全不用搭理其他操作,只需要干两件事:
- 在列表里添加想订阅的网站(需要在
.
和/
前面添加\
进行转义,避免稍后匹配网站出错)。 - 在词典里添加网站和对应的 RSSHub 前缀(这回不需要转义)。
添加好列表后,日常使用基本就没问题了。当你在浏览器里看到一个感兴趣的页面,就可以通过分享菜单运行这个捷径,稍等就能拷贝订阅地址到剪贴板。
接下来的部分主要面向对捷径制作感兴趣的读者,不读也不影响使用,但如果你想知道正则表达式和字典的玩法,或者好奇我怎样把几百步的捷径压缩到十几步,就不要错过下面的内容。
本文知识点:
- 匹配文本操作:通过正则表达式替代冗长的 if 判断
- 词典操作:用词典存储常用网站列表
捷径原理
生成 RSS 订阅的地址的捷径老早就有构思,但是旧版很简陋,只是不断通过 if 操作来识别网站,然后生成对应的订阅地址。但这样的捷径会有几十个连环的 if 嵌套,难看不说,别人想增改一下订阅源也无从下手,所以旧版的动作我一直拿不出手。直到把近百步缩短到十几步1
一般我们需要自行烧录的网页都是不提供 RSS 订阅源的,比如知乎的用户主页、哔哩哔哩的 UP 主的个人空间,RSSHub 为这些页面生成的订阅链接很有规律,一般是「链接前缀 + 网页 id」。
所以,捷径的工作原理其实很清晰:
- 识别当前的网站是什么
- 匹配对应的 RSSHub 链接前缀
- 提取网页 id,和前缀拼接起来
用正则匹配来代替 if 判断
原先的动作又长又烂,问题就出在 if 操作。
if 操作其实很傻,它会不断问你:喝点咖啡吗?不喜欢的话,红茶呢?绿茶呢?奶茶呢?没完没了。事实上,当你去朋友家里做客,只要他不是存心想赶你走,客套话都只需要一句「喝点啥」。
显然,如果能在捷径里实现「喝点啥」的效果,整个流程就非常简洁了。
替代方案的灵感来自和 Hum 的一次交流。当时我在改进一个解压文件的捷径,为了达到同时支持 zip、rar、tar 等压缩包的目的,嵌套了好几层 if,非常累赘。经过 Hum 提醒,我改用了「匹配文本」的操作。
捷径里的匹配文本操作支持正则表达式,匹配方式更灵活,只需事先准备好多个待选项,再进行一次正则匹配,匹配成功任意一项就能接着后面的操作(解压文件), 没有没完没了的 if 问话。
在解压的捷径里,我用 zip|rar|tar
来表示「zip
、rar
或 tar
」(其中 |
意味着「或者」),如果匹配成功,统计到的匹配项数量就会大于 0。这样,短短几步就能识别出传入的文件是不是我要的压缩包类型。
匹配文本同样适合拿来识别网站。现在,回过头去优化 RSS 订阅的捷径。和识别压缩包的方法类似,稍后我们要填进「匹配文本」操作的文本是 网站A|网站B|网站C……
,只要你有需求,再追加几十个网站也没问题。一般我们取网站的部分域名即可,比如少数派的知乎专栏,取 zhuanlan.zhihu.com
就足够和其他网站区分开来。不过 .
要换成 \.
进行转义,以保证能够正常匹配。2
不过,如果你真的要加一大堆网站,直接在匹配文本的小框里打字会很累,所以我们换个更轻松的办法:把网站挨个填在列表操作里,在通过「合并文本」拼在一起。当然,为符合正则表达式,合并时的分隔符要用 |
。
这番改动并不影响网站的识别,但是可以让增加或删除网站变得很舒服,点点列表项目前的加减符号就成了。
需要留意,在 iPhone 和 iPad 上编辑这个捷径时少有不同,因为部分网页在 iPad 上显示的是电脑版,比如哔哩哔哩在 iPad 上的网址就是 space.bilibili.com
开头(上图里展示的就是电脑版网址),而在 iPhone 上则是 m.bilibili.com/space
打头。如果你经常跨设备烧录 RSS 地址,不妨把两版网站都加进列表(稍后编辑词典时也最好添加两个版本)。
用字典来存储链接前缀
识别完网站,马上就要烧录 RSS 地址了。说是烧录,其实只是把网页链接末尾的 id 加到 RSSHub 前缀上,直接在文本框里拼接就成。不过在识别之后、拼接之前,还要解决一个大问题:如何调用网站对应的前缀。
答案就是构建一本词典。
词典嘛,这个简单,查汉语词典时按拼音或者部首去找词语,我们都会。捷径里的词典也和纸质词典有异曲同工之妙,同样是根据一个键(相当于拼音或部首)来查找一个值(相当于词语)。
我们刚才识别过的网站名,顺势就可以拿来当键,而值就是对应的 RSSHub 链接前缀了。这么一想,很快就能在捷径里做出一个词典来。
你还可以继续丰富这个词典,把其他想订阅的网站添加进去。具体链接可以在 RSSHub 上找,如果想让烧出来的 RSS 源稳定一点,你也可以按 RSSHub 的指导文档自己搭建烧录服务器。
提取网页 id
最后的拼接步骤难度不大,还是依靠匹配文本的操作。多数网页链接后面的 id 比较有规律,经过测试,我这个捷径也支持了知乎、豆瓣、哔哩哔哩、微信公众号、简书等常见站点,不过还是希望大家简单了解一下匹配的依据,遇到特殊的网页也能调整表达式。
以少数派的知乎专栏为例,如果我想通过 RSS 知道少数派专栏的动态,就需要从链接中提取出 sspai
部分拿去拼接。
观察一下刚才提取的 id,其实就是链接末尾的一串英文;如果再观察几个其他网页,会发现还有数字类型的 id。如果 id 都是英文加数字结尾,那么直接用 [0-9a-zA-Z]*$
就好了——表示匹配「结尾是任意英文数字的组合」。不过还有一类链接——比如哔哩哔哩的 UP 主空间——后面会跟着一串小尾巴,所以在提取 id 前我们还要先截掉烦人的尾巴。所幸尾巴一般是 ?
打头的,删掉 \?.*
所代表的「?
后的内容」就行。
把删除尾巴、提取 id 的步骤连起来,再加一个文本框,把前缀、id 拼接起来,就获得订阅地址了。
最后剩下订阅 RSS,该用 URL Scheme 就用 URL Scheme,不支持跳转的就直接打开某某 App,或者把链接拷贝到剪贴板,这部分就给大家自己发挥了。
试着订阅几个网页,它们都成功显示在了 RSS 阅读器里。其中微信公众号由于官方限制,不能直接在微信里烧录,需要借助即刻 App 里对应的专题当跳板,拿即刻链接来烧才奏效。
小结
用了一段时间这个捷径后,我发现自己的阅读习惯也有了改变:在移动设备上读 RSS 的时间变长了。备着这样一个小工具,偶然扒到一个有意思的博主,也不用按耐到回家开电脑才能订阅他,感兴趣就烧录下来。以前读 RSS 有点像用 iTunes 听歌,一般得在电脑上搞好歌单(订阅好 RSS),再到手机上欣赏(阅读);现在移动设备也能独立完成整个在线阅读流程:从阅读、发现、订阅到阅读的回环。
精选评论 (3)
我的评论
Daitiger
另外,有一个小bug可以修复一下,运行完捷径后生成的URL最后多了一个小空格,导致Inoreader 不能识别URL,删掉小空格就没问题了
付费内容组
by Minja
albus1993